用户对问题“使用apache & mod wsgi配置django ap调度程序”的回答 您所在的位置:网站首页 Django if标签 用户对问题“使用apache & mod wsgi配置django ap调度程序”的回答

用户对问题“使用apache & mod wsgi配置django ap调度程序”的回答

2023-05-28 04:36| 来源: 网络整理| 查看: 265

https://medium.com/@mrgrantanderson/replacing-cron-and-running-background-tasks-in-django-using-apscheduler-and-django-apscheduler-d562646c062e解释了如何设置包含调度程序的AppConfig:

为此,您必须在settings.py中添加以下内容

INSTALLED_APPS = [ ... "django_apscheduler", ] # This scheduler config will: # - Store jobs in the project database # - Execute jobs in threads inside the application process SCHEDULER_CONFIG = { "apscheduler.jobstores.default": { "class": "django_apscheduler.jobstores:DjangoJobStore" }, 'apscheduler.executors.processpool': { "type": "threadpool" }, } SCHEDULER_AUTOSTART = True

启动调度程序的文件可能如下所示:

import logging from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.executors.pool import ProcessPoolExecutor, ThreadPoolExecutor from django_apscheduler.jobstores import register_events, register_job from django.conf import settings # Create scheduler to run in a thread inside the application process scheduler = BackgroundScheduler(settings.SCHEDULER_CONFIG) def start(): if settings.DEBUG: # Hook into the apscheduler logger logging.basicConfig() logging.getLogger('apscheduler').setLevel(logging.DEBUG) # Adding this job here instead of to crons. # This will do the following: # - Add a scheduled job to the job store on application initialization # - The job will execute a model class method at midnight each day # - replace_existing in combination with the unique ID prevents duplicate copies of the job scheduler.add_job("core.models.MyModel.my_class_method", "cron", id="my_class_method", hour=0, replace_existing=True) # Add the scheduled jobs to the Django admin interface register_events(scheduler) scheduler.start()

启动调度程序的AppConfig如下所示:

from django.conf import settings class CoreConfig(AppConfig): name = "core" def ready(self): from . import scheduler if settings.SCHEDULER_AUTOSTART: scheduler.start()

(从上面链接的教程复制的所有代码)。

但是请注意,django-ap调度程序在他们的自述文件中声明

这种简单性的折衷之处在于,您需要小心确保只有一个调度程序在特定时间点积极运行。(https://github.com/jcass77/django-apscheduler#quick-start)。

如果您在多线程Django-Environment中高效地运行调度程序,据我所知,这并不能得到保证。因此,这个解决方案肯定应该是一丁点儿的--更合适的方法是遵循自述文件的建议,为调度程序发出阻塞命令,并独立于您在一个专用进程中所提供的服务来运行该命令。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有